package it.traveldream.utility;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import it.traveldream.EJB.UtenteEJBImpl;
import it.traveldream.EJB.DTO.*;
import it.traveldream.EJB.entities.*;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.TypedQuery;


//passaggio da DTO a entità
public class DTO2Entities {

	public static Citta convertCittaDTO(CittaDTO city){

		Citta result = new Citta();



		result.setDistrict(city.getDistrict());
		result.setId(city.getId());
		result.setName(city.getName());
		result.setPopulation(city.getPopulation());
		result.setStati(null);


		return result;

	}

	public static Stati convertStatiDTO(StatoDTO states){

		Stati result = new Stati();

		result.setCode(states.getCode());
		result.setContinent(states.getContinent());
		result.setName(states.getName());
		result.setRegion(states.getRegion());

		return result;


	}


	public static User convertUtenteDTO(UtenteDTO usr,List<Group> listaG){

		User result = new User();
		Group g = new Group();
		User t = new User();
		List<Group> temp = new ArrayList<Group>();

		Iterator<Group> iterg = listaG.iterator();


		while(iterg.hasNext()){

			g = iterg.next();
			Iterator<User> iter = g.getUsers().iterator();

			while(iter.hasNext()){

				t = iter.next();

				if (t.equals(usr)) temp.add(g) ;

			}
		}
		
		result.setCognome(usr.getCognome());
		result.setDataNascita(usr.getDataNascitaAsDate());
		result.setEmail(usr.getEmail());
		result.setNome(usr.getNome());
		result.setPassword(usr.getPassword());
		result.setUserid(usr.getUsername());
		result.setGroups(temp);
		result.setIdUtente(usr.getIduser());


		return result;


	}


	public static TrasportiSingoli convertTrasportoSingoloDTO(TrasportoSingoloDTO trasp){

		TrasportiSingoli result = new TrasportiSingoli();


		result.setCitta1(DTO2Entities.convertCittaDTO(trasp.getCittaPartenza()));
		result.setCitta2(DTO2Entities.convertCittaDTO(trasp.getCittaArrivo()));
		result.setData(trasp.getData());
		result.setDeleted(trasp.getDeleted());
		result.setDisponibilita(trasp.getDisponibilita());
		result.setIdTrasporto(trasp.getIdTrasporto());
		result.setPrezzo(trasp.getPrezzo());

		return result;		

	}


	public static Escursioni convertEscursioneDTO (EscursioneDTO esc){


		Escursioni result = new Escursioni();


		result.setCitta(DTO2Entities.convertCittaDTO(esc.getCitta()));
		result.setDeleted(esc.getDeleted());
		result.setDescrizione(esc.getDescrizione());
		result.setIdEscursione(esc.getIdEscursione());
		result.setPrezzo(esc.getPrezzo());

		return result;





	}

	public static Alloggi convertAllogioDTO(AlloggioDTO zimmer){

		Alloggi result = new Alloggi();

		result.setCitta(DTO2Entities.convertCittaDTO(zimmer.getCitta()));
		result.setDeleted(zimmer.getDeleted());
		result.setDescrizione(zimmer.getDescrizione());
		result.setIdAlloggio(zimmer.getIdAlloggio());

		
		return result;

	}

	public static Disponibilita convertDisponibilitaDTO(DisponibilitaDTO disp){

		Disponibilita result =new Disponibilita();

		result.setAlloggi(DTO2Entities.convertAllogioDTO(disp.getAlloggio()));
		result.setData(disp.getData());
		result.setIdDisponibilita(disp.getIdDisponibilita());
		result.setNumerocamere(disp.getNumerocamere());
		result.setPrezzo(disp.getPrezzo());
		result.setTipoCamera(disp.getTipoCamera());

		return result;



	}


	public static Categorie convertCategoriaDTO(CategoriaDTO cat){

		Categorie result = new Categorie();

		result.setDescrizione(cat.getDescrizione());
		result.setIdCategoria(cat.getIdCategoria());


		return result;


	}

	public static Pacchetti convertPacchettoDTO(PacchettoDTO pkg){

		Pacchetti result = new Pacchetti();

		result.setAlloggi(DTO2Entities.convertAllogioDTO(pkg.getAlloggi()));
		result.setCategorie(DTO2Entities.convertCategoriaDTO(pkg.getCategorie()));
		result.setCreatoDa(pkg.getCreato_da().getIduser());
		result.setCustom(pkg.getCustom());
		if(pkg.getCustom_da() != null)
			result.setCustomDa(pkg.getCustom_da().getIduser());
		else
			result.setCustomDa(0);
		result.setDeleted(pkg.getDeleted());
		result.setDisponibilita(pkg.getDisponibilita());

		Iterator<EscursioneDTO> iteresc = pkg.getEscursionis().iterator();

		while (iteresc.hasNext()){
			if(result.getEscursionis() == null)
				System.out.println("Ca ca ca ca ca ca "  + iteresc.hasNext() );
			result.getEscursionis().add(DTO2Entities.convertEscursioneDTO(iteresc.next()));

		}

		if(pkg.getTipocamera().equalsIgnoreCase("Singola"))
			result.setTipocamera(1);
		if(pkg.getTipocamera().equalsIgnoreCase("Doppia"))
			result.setTipocamera(2);
		if(pkg.getTipocamera().equalsIgnoreCase("Tripla"))
			result.setTipocamera(3);
		if(pkg.getTipocamera().equalsIgnoreCase("Quadrupla"))
			result.setTipocamera(4);

		result.setIdPacchetto(pkg.getIdPacchetto());
		result.setSconto((int)pkg.getSconto());
		result.setTrasportiSingoli1(DTO2Entities.convertTrasportoSingoloDTO(pkg.getTrasportAndata()));
		result.setTrasportiSingoli2(DTO2Entities.convertTrasportoSingoloDTO(pkg.getTrasportRitorno()));

		return result;

	}

	public static Acquisti convertAcquistoDTO(AcquistoDTO acq){

		Acquisti result = new Acquisti();
		AcquistiPK apk = new AcquistiPK();
		apk.setIdUtente(acq.getUtente().getIduser());
		apk.setIdPacchetto(acq.getPacchetto().getIdPacchetto());
		result.setId(apk);
		result.setPacchetti(DTO2Entities.convertPacchettoDTO(acq.getPacchetto()));
		result.setNumeroAcquisti(acq.getNumeroAcquisti());

		//inserimento della chiave primaria
		//COMMENTATO PERCHE' INSERTABLE FALSE UPDATABLE FALSE, VERIFICARE SE E' GIUSTO COSI'
		//result.getId().setIdPacchetto(acq.getPacchetto().getId());
		// getid da nullPointer? VERIFICARE
		
		
		//result.getId().setIdUtente(acq.getUtente().getIduser());




		return result;



	}


	public static GiftList convertGiftListDTO(GiftListDTO gift, EntityManager man){

		UtenteEJBImpl help = new UtenteEJBImpl(man);
		
		GiftList result = new GiftList();

		result.setIdElemento(gift.getIdElemento());
		result.setAcquistato(gift.getAcquistato());
		result.setAcquistatoDa(gift.getAcquistatoDa());
		result.setIdServizioBase(gift.getIdServizioBase());
		result.setIdUtente(help.getIdFromUsername(gift.getUsernameUtente()));
		result.setPacchetti(DTO2Entities.convertPacchettoDTO(gift.getPacchetto()));
		result.setTipo_servizioBase(gift.getTipo_servizio_base());

		return result;


	}

	public static Modifiche convertModificaDTO(ModificaDTO mod){

		Modifiche result = new Modifiche();

		result.setDataModifica(mod.getDataModifica());
		result.setIdModifica(mod.getIdModifica());
		result.setIdUtente(mod.getIdUtente());
		result.setPacchetti(DTO2Entities.convertPacchettoDTO(mod.getPacchetto()));

		return result;		

	}














}
